Skip to content

perf: improve MarkerComposable rendering performance - #881

Open
brucemok8 wants to merge 3 commits into
googlemaps:mainfrom
brucemok8:perf/improves-marker-composable-rendering-performance
Open

perf: improve MarkerComposable rendering performance#881
brucemok8 wants to merge 3 commits into
googlemaps:mainfrom
brucemok8:perf/improves-marker-composable-rendering-performance

Conversation

@brucemok8

@brucemok8 brucemok8 commented Mar 27, 2026

Copy link
Copy Markdown

Summary

This PR improves the rendering performance of MarkerComposable, particularly when displaying a larger number of markers with frequently updating content.

Changes

  • Reuse ComposeView instances instead of creating and disposing them for each render. The view is retained and used to generate updated bitmaps when marker keys change, and disposed only when the marker is removed.
  • Update rememberComposeBitmapDescriptor to return a nullable type. Callers skip rendering until the bitmap is ready, preventing main thread blocking and allowing markers to appear asynchronously.

Impact

These changes significantly reduce UI jank during marker updates. In testing, scenarios with ~25 dynamically updating markers show noticeably smoother performance.

@google-cla

google-cla Bot commented Mar 27, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@brucemok8
brucemok8 force-pushed the perf/improves-marker-composable-rendering-performance branch from 6bec4de to f9ba7e5 Compare March 27, 2026 05:11
@kikoso
kikoso force-pushed the perf/improves-marker-composable-rendering-performance branch from 20cd3ba to b24b74a Compare April 9, 2026 13:57
brucemok8 and others added 2 commits August 18, 2026 16:04
reverted pushing renderComposableToBitmapDescriptor call to IO thread as causing intermittent crash
@dkhawk
dkhawk force-pushed the perf/improves-marker-composable-rendering-performance branch from b24b74a to bdf161f Compare August 18, 2026 22:17
…eView lifecycle

Add an interactive performance demonstration for MarkerComposable and
polish offscreen rendering lifecycle details on top of googlemaps#881.

- Add MarkerComposablePerformanceActivity showcasing 10-75 dynamic
  markers with 1Hz and 4Hz auto-update stress testing.
- Add an explanatory dialog clarifying marker IDs vs live state counters
  and demo controls.
- Ensure pixel-perfect alignment for marker badge typography by disabling
  font padding and using vector icons.
- Delegate setContent dynamically via { currentContent() } in
  rememberComposeBitmapDescriptor so retained ComposeViews reflect
  updated state on recomposition.
- Set alpha = 0f on retained ComposeViews to prevent offscreen rendering
  views from appearing in the window root layout.
@dkhawk
dkhawk force-pushed the perf/improves-marker-composable-rendering-performance branch from 659044a to 7a57048 Compare August 18, 2026 23:08
@dkhawk
dkhawk requested a review from kikoso August 18, 2026 23:08

@LoyalAbbas LoyalAbbas left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants